package com.zjpavt.client.page.basepage;

import com.zjpavt.client.page.abstractpage.AbstractEditablePage;
import com.zjpavt.client.page.intefacepage.BasePage;
import com.zjpavt.client.page.intefacepage.EditablePage;
import lombok.extern.slf4j.Slf4j;

/**
 * 主要用于作为一个成员组成一个页面
 * 所有的编辑操作在本类中完成
 * 为了实现页面的多继承（翻页，内嵌，编辑等）
 *
 * 业务流程在这里~
 * @author zyc
 */
@Slf4j
public class BaseEditablePage extends AbstractEditablePage implements EditablePage {
    private EditablePage owner;

    public BaseEditablePage(int pageNum, long mRefreshPeriod,EditablePage basePage) {
        super(pageNum, mRefreshPeriod);
        this.owner = basePage;
    }

    /**
     * 在初始化的时候这里什么也没有做
     * 但不是逻辑结构中构造方法需要调用初始化方法
     *
     * 实际过程中发现 组合中的整体只实现了相关接口
     * 初始化过程中可以依赖部分实现初始化，但是部分的具体实现由整体决定
     *
     * 不可以 先构造父类导致找不到owner
     */
    @Override
    public void initEditUnits() {
        this.owner.initEditUnits();
    }

    @Override
    public void setDefaultVal() {
        throw new IllegalArgumentException();
    }

    @Override
    public void saveVal() {
        throw new IllegalArgumentException();
    }

    @Override
    public void refreshPage() {
        throw new IllegalArgumentException();
    }

    public BasePage getOwner() {
        return owner;
    }

    public void setOwner(EditablePage owner) {
        this.owner = owner;
    }

    @Override
    public void enterEditMode() {
        isInEditMode = true;
//        cancelAutoRefreshing();
        this.owner.setDefaultVal();
        editUnitList.get(currBlinkIndex).startEdit();
    }

    @Override
    public void exitEditMode() {
        isInEditMode = false;
        editUnitList.get(currBlinkIndex).stopEdit(false);
        currBlinkIndex = 0;
//		先刷新再保存 保证页面显示的流畅
        this.owner.refreshPage();
//        this.owner.startAutoRefreshing();
        this.owner.saveVal();
        this.owner.refreshPage();
    }

    @Override
    public boolean isInEditMode() {
        return super.isInEditMode();
    }

    @Override
    public int getEditUnitSize() {
        return super.getEditUnitSize();
    }
}
